package com.example.myjavafx.controller;

import com.example.myjavafx.model.User;
import com.example.myjavafx.model.Users;
import com.example.myjavafx.service.ApiService;
import com.example.myjavafx.service.JavaFXApiService;
import com.fasterxml.jackson.core.JsonProcessingException;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.fxml.FXML;
import javafx.scene.control.Label;
import javafx.scene.control.TableView;
import javafx.scene.control.Button;
import javafx.scene.control.ProgressIndicator;

public class HomeController {
    @FXML
    private TableView<Users> userTable;

    @FXML
    private ProgressIndicator loadingIndicator;
    @FXML
    private Label errorLabel;
    @FXML
    private Button refreshButton;
    @FXML
    private void initialize() throws JsonProcessingException {
        // 绑定表格数据源
        userTable.setItems(users);

        // 设置刷新按钮的动作
        refreshButton.setOnAction(event -> {
            try {
                loadData();
            } catch (JsonProcessingException e) {
                throw new RuntimeException(e);
            }
        });

        // 进入主页面时自动加载数据
        loadData();
    }
    private final ObservableList<Users> users = FXCollections.observableArrayList();
    private void loadData() throws JsonProcessingException {
        // 显示加载提示
        loadingIndicator.setVisible(true);
        errorLabel.setVisible(false);
        userTable.setVisible(false);
        refreshButton.setDisable(true);

//        JavaFXApiService.getUsers(users1 -> users1.addAll(users), error -> {});
        // 调用API获取数据
        ApiService.fetchUsers(
                // 成功回调
                data -> {
                    users.setAll(data);
                    loadingIndicator.setVisible(false);
                    userTable.setVisible(true);
                    refreshButton.setDisable(false);
                },
                // 失败回调
                error -> {
                    loadingIndicator.setVisible(false);
                    errorLabel.setText("加载失败: " + error);
                    errorLabel.setVisible(true);
                    refreshButton.setDisable(false);
                }
        );
//        JavaFXApiService.postUser(new User("123",123), user -> {
//            users.setAll(user);
//            loadingIndicator.setVisible(false);
//            userTable.setVisible(true);
//            refreshButton.setDisable(false);
//        }, error -> {
//            loadingIndicator.setVisible(false);
//            errorLabel.setText("加载失败: " + error);
//            errorLabel.setVisible(true);
//            refreshButton.setDisable(false);
//        });
    }
}
